/*** 
 * @ ****************************************** 
 * @Editors: yangyifan yangyf@mw-robot.com
 * @Date: 2025-03-13 18:26:41
 * @LastEditTime: 2025-04-30 15:01:50
 * @Description: 
 * @ ****************************************** 
 */
#pragma once

#include <opencv2/core.hpp>
#include <opencv2/calib3d.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>

#include <iostream>
#include <vector>
#include <string>
#include <memory>


struct IntrinsicConfig {
    cv::Size board_size {5, 4};        // 棋盘格内角点数 (width, height)
    float square_size = 0.025f;        // 棋盘格物理尺寸（米）
    int min_frames = 15;               // 最小有效帧数
    double max_reproj_error = 1.0;     // 最大允许重投影误差
    bool use_radial_distortion = true; // 使用径向畸变模型
    int calibration_flags = 0;         // OpenCV标定标志位
};

struct ExtrinsicConfig {
    cv::Size board_size {5, 4};     // 标定板角点维度
    float square_size = 0.025f;     // 物理尺寸（米）
    int min_frames = 15;            // 最小有效帧数
    double max_reproj_error = 1.0;  // 最大允许重投影误差
    double ransac_thresh = 3.0;     // RANSAC阈值（像素）
};

class ConfigInfo {
public:
    ConfigInfo() {
        std::cout <<"初始化配置类." << std::endl;
    }
    ~ConfigInfo(){
        std::cout <<"析构配置类." << std::endl;
    }

    cv::Mat getCameraMatrix() const { return camera_intr_matrix_; }
    cv::Mat getDistCoeffs() const { return dist_coeffs_; }
    double getReprojectionError() const { return reproj_error_; }
private:
    cv::Mat camera_intr_matrix_;
    cv::Mat dist_coeffs_;
    double reproj_error_;
};